package com.yl.users.services

import com.baomidou.mybatisplus.extension.plugins.pagination.Page
import com.yl.common.control.ResponseBody
import com.yl.users.entity.CompanyDept
import com.yl.users.entity.CompanyUser
import com.yl.users.pojo.vo.CompanyDeptSelectVo
import com.yl.users.pojo.vo.CompanyUserSelectVo
import org.apache.ibatis.annotations.Param

/**
 *  公司部门
 */
interface ICompanyDeptService {

	/**
	 * 添加子部门
	 */
	fun addSubDept(dept: CompanyDept): ResponseBody

	/**
	 * 部门详情
	 */
	fun getDept(id: Long): CompanyDept?

	/**
	 * 绑定上级部门
	 */
	fun bindSuperDept(deptId: Long, superDeptId: Long): ResponseBody

	/**
	 * 删除部门
	 */
	fun delDept(id: Long): ResponseBody

	/**
	 * 是否存在目标下级部门
	 */
	fun deptHaveSubId(deptId: Long, subId: Long, companyId: Long): Boolean

	/**
	 * 修改部门基础信息(目前只改名字，地址，电话，坐标)
	 */
	fun updateDeptInfo(companyDept: CompanyDept):ResponseBody

	/**
	 *  修改部门(最好不要用)
	 */
	fun updateDept(companyDept: CompanyDept): ResponseBody

	/**
	 * 获取部门的用户列表
	 */
	fun getUserList(deptId: Long, vo: CompanyUserSelectVo): MutableList<CompanyUser>

	/**
	 * 获取部门的用户分页
	 */
	fun getUserPage(page: Page<CompanyUser>, vo: CompanyUserSelectVo, deptId: Long): Page<CompanyUser>

	/**
	 * 用户绑定到部门(同时会绑定分部)
	 */
	fun bindUserToDept(deptId: Long, userId: Long): ResponseBody

	/**
	 * 部门解绑用户
	 */
	fun unBindUserDept(deptId: Long, userId: Long): ResponseBody

	/**
	 * 绑定分公司
	 */
	fun bindUserToSubCompany(userId: Long, subCompanyId: Long): ResponseBody

	/**
	 * 解绑分公司
	 */
	fun unBindUserToSubCompany(userId: Long, subCompanyId: Long): ResponseBody

	/*
	 * 获取分公司用户分页
	 */
	fun getSubCompanyUserPage(page: Page<CompanyUser>, vo: CompanyUserSelectVo, subCompanyId: Long): Page<CompanyUser>

	/*
	 * 获取分公司用户列表
	 */
	fun getSubCompanyUserList(
		vo: CompanyUserSelectVo,
		subCompanyId: Long
	): MutableList<CompanyUser>


	//下面做分院，后期分院和部门分开service todo
	/**
	 * 获取分院下的分院 （主院查分院用）
	 */
	fun getSubCompanyList(deptId: Long):MutableList<CompanyDept>

	/**
	 * 获取分院下的部门分页
	 */
	fun getSubCompanyDeptPage(page: Page<CompanyDept>, companyDept: CompanyDeptSelectVo):Page<CompanyDept>

	/**
	 * 获取分院下的部门列表
	 */
	fun getSubCompanyDeptList( vo: CompanyDeptSelectVo):MutableList<CompanyDept>

	/**
	 * 查询部门下（包含子部门的用户列表）
	 */
	fun getUserByDeptId(page : Page<CompanyUser>,
	                       vo : CompanyUserSelectVo,
	                       deptId : Long
	):Page<CompanyUser>

	/**
	 * 获取最后一次登录本院有某个权限的用户（暂时websocket用）
	 * subCompanyId 分院id
	 * permCode 权限code
	 */
	fun getLastLoginHavePremUsers(subCompanyId: Long,permCode:String):List<CompanyUser>


}
